package com.monitor.service.parser;

import com.monitor.service.parser.impl.*;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 指标解析器工厂
 * 工厂模式：根据监控项类型创建相应的解析器
 */
public class MetricParserFactory {
    
    // 使用ConcurrentHashMap解决多线程并发问题
    private static final Map<String, MetricParser> parsers = new ConcurrentHashMap<>();
    
    static {
        // 注册各种解析器
        registerDefaultParsers();
    }
    
    /**
     * 注册默认解析器
     */
    private static void registerDefaultParsers() {
        parsers.put("cpu", new CpuMetricParser());
        parsers.put("memory", new MemoryMetricParser());
        parsers.put("disk", new DiskMetricParser());
        parsers.put("load", new SystemLoadMetricParser());
        parsers.put("processes", new ProcessMetricParser());
        parsers.put("uptime", new UptimeMetricParser());
        parsers.put("logs", new SystemLogMetricParser());
        parsers.put("app", new AppStatusMetricParser());
    }
    
    /**
     * 获取指定类型的指标解析器
     * @param metricType 指标类型
     * @return 对应的解析器实例，如果不存在则返回null
     */
    public static MetricParser getParser(String metricType) {
        return parsers.get(metricType);
    }
    
    /**
     * 注册新的指标解析器
     * @param metricType 指标类型
     * @param parser 解析器实例
     */
    public static void registerParser(String metricType, MetricParser parser) {
        if (metricType != null && parser != null) {
            parsers.put(metricType, parser);
        }
    }
} 